Saltar al contenido principal

5.5 Módulos

A medida que los programas crecen en tamaño y complejidad, se vuelve necesario organizar el código en varias partes. En Python, esta organización se logra mediante módulos y paquetes, que permiten dividir un programa en archivos independientes y reutilizar el código en diferentes proyectos.

El uso de módulos y paquetes favorece la modularidad, la mantenibilidad y la colaboración en equipos de desarrollo.


1️⃣ Qué es un módulo​

Un módulo es simplemente un archivo de Python con extensión .py que contiene definiciones de variables, funciones o clases. Su principal objetivo es reutilizar código importándolo desde otros programas.

Ejemplo básico de módulo​

Supongamos que creamos un archivo llamado matematicas.py con el siguiente contenido:

Archivo: matematicas.py
def sumar(a, b):
return a + b

def restar(a, b):
return a - b

Ahora, desde otro archivo, podemos utilizar esas funciones importando el módulo:

Archivo principal: programa.py
import matematicas

print(matematicas.sumar(3, 4))
print(matematicas.restar(10, 5))
en este ejemplo
  • Cada archivo .py actúa como un módulo independiente.
  • Con import matematicas se carga el módulo completo en memoria.
  • Para acceder a sus funciones se usa la notación nombre_modulo.funcion().

2️⃣ Tipos de importación​

Python ofrece varias formas de importar contenido desde otros módulos.

🟩 Importación completa​

Se importa el módulo entero mediante la palabra reservada import. Es la forma más segura, ya que evita conflictos de nombres y deja claro de dónde procede cada función.

import matematicas
resultado = matematicas.sumar(2, 5)

🟦 Importación parcial​

Se importan solo las funciones que se van a emplear. Es una forma cómoda, pero puede provocar colisiones de nombres si hay funciones con el mismo nombre en distintos módulos.

from matematicas import sumar
print(sumar(10, 20))
en este ejemplo

Importa solo la función sumar, por lo que puede utilizarse directamente sin el prefijo del módulo.

🟨 Importación múltiple​

Permite importar varias funciones o variables a la vez. Se separan por comas dentro de la instrucción from.

from matematicas import sumar, restar

🟧 Importación con alias​

Los alias son útiles para abreviar nombres de módulos largos o mejorar la legibilidad del código. El uso de as define un nombre alternativo local para el módulo.

import matematicas as m
print(m.sumar(5, 5))

🟥 Importación global de nombres​

Esta forma importa todos los nombres públicos del módulo en el espacio de nombres actual. Puede generar confusión y errores, especialmente en programas grandes, ya que es difícil saber de dónde procede cada función.

from matematicas import *
print(sumar(1, 2))
(no recomendada)

Evita esta forma salvo en pruebas rápidas o entornos controlados.


3️⃣ La Variable __name__​

Cuando se ejecuta un archivo en Python, este recibe un valor especial en la variable __name__. Si el archivo se ejecuta directamente, __name__ vale "__main__". Si se importa como módulo, toma el nombre del archivo.

Ejemplo de uso​

Archivo: utilidades.py
def mostrar_mensaje():
print("Este mensaje proviene del módulo utilidades.")

if __name__ == "__main__":
print("Ejecutado directamente.")
else:
print("Importado como módulo.")
en este ejemplo
  • Si se ejecuta con python utilidades.py, mostrará “Ejecutado directamente.”
  • Si se importa desde otro archivo (import utilidades), mostrará “Importado como módulo.”
tip

Esta técnica se usa para incluir bloques de prueba o demostración que solo se ejecuten cuando el archivo es principal.


4️⃣ Instalación de módulos externos​

Existen miles de módulos desarrollados por la comunidad que pueden instalarse mediante la herramienta pip. A continuación se presentan dos ejemplos simples...

🟩 Módulo rich​

rich es un módulo externo que permite mostrar texto con colores, tablas, barras de progreso, paneles y más directamente en la consola de Python, de forma sencilla y elegante.

Instalación
py -m pip install rich
documentación

A continuación mostraremos unos ejemplos básicos pero para mas información...

Colores y estilos de texto

Puedes usar etiquetas similares a HTML para dar color y formato al texto.

from rich import print

print("[bold red]Error:[/bold red] Archivo no encontrado")
print("[green]Operación completada con éxito[/green]")
print("[blue underline]Enlace importante[/blue underline]")
Ejemplo de print en rich

Colores disponibles: red, green, yellow, blue, magenta, cyan, white, black

Estilos: bold, italic, underline, reverse, blink, dim

Emojis

Puedes usar emojis nativos de forma sencilla:

print("¡Hola! :smile: :rocket: :snake:")
Ejemplo de emojis en rich

Se puede consultar la lista completa de emojis compatibles aquí: 👉 https://www.webfx.com/tools/emoji-cheat-sheet/

Paneles (recuadros de texto)

Los paneles sirven para mostrar mensajes destacados.

from rich.panel import Panel

print(Panel("Bienvenido al sistema", title="💡 MENSAJE", subtitle="Todo OK"))

🧩 Puedes cambiar el color del borde:

print(Panel("Atención", title="⚠️ ALERTA", border_style="red"))
Ejemplo de panel en rich
Tablas con Table

Ideal para mostrar datos de forma ordenada.

from rich.table import Table
from rich.console import Console

console = Console()

tabla = Table(title="Usuarios registrados")

tabla.add_column("ID", style="cyan", justify="center")
tabla.add_column("Nombre", style="green")
tabla.add_column("Rol", style="magenta")

tabla.add_row("1", "Ana", "Admin")
tabla.add_row("2", "Luis", "Editor")
tabla.add_row("3", "Marta", "Usuario")

console.print(tabla)
Ejemplo de table en rich
Barras de progreso

track() es una función del módulo rich.progress que envuelve un iterable (por ejemplo, range(), una lista o un generador) y muestra una barra de progreso mientras se recorre.

from rich.progress import track

for elemento in track(iterable, description="Texto..."):
# tu código aquí

Ejemplo de track en rich

🟦 Módulo requests​

requests es un módulo externo de Python que permite realizar peticiones HTTP (GET, POST, PUT, DELETE…) de forma sencilla y legible. Se usa para conectarse a APIs, descargar datos de páginas web o enviar información a un servidor.

Instalación
py -m pip install requests
Importación
import requests
Métodos PrincipalesUso
requests.get()Obtener información
requests.post()Enviar información
requests.put()Actualizar datos
requests.delete()Eliminar recursos
requests.head()Obtener solo cabeceras
documentación

Aquí puedes obtener la 👉 documentación completa de este módulo. A continuación se mencionan en el enlace

Hacer una solicitud GET

La más común: obtener información de una URL o API.

import requests

respuesta = requests.get("https://api.github.com")
print(respuesta.status_code) # Código de estado (200 = OK)
print(respuesta.text) # Contenido de la respuesta (en texto)
Códigos ComunesSignificado
200OK (éxito)
404No encontrado
500Error del servidor
403Prohibido
301Redirección
Obtener datos en formato JSON

Muchas APIs devuelven datos en formato JSON. Puedes convertirlos directamente en un diccionario de Python con .json():

respuesta = requests.get("https://api.github.com/users/octocat")
datos = respuesta.json()

print(datos["login"]) # octocat
print(datos["id"]) # 583231
Enviar datos a un servidor POST

Sirve para enviar información, por ejemplo a un formulario o una API.

data = {"usuario": "ana", "edad": 25}
r = requests.post("https://httpbin.org/post", data=data)

print(r.status_code)
print(r.json()) # Muestra lo que se envió
Manejo básico de errores

Siempre es buena práctica comprobar si la petición fue exitosa:

r = requests.get("https://api.github.com/user")

if r.status_code == 200:
print("Petición exitosa")
else:
print("Error:", r.status_code)
Ejemplo práctico
solicitud de información usuario GITHUB
import requests

def obtener_usuario(usuario):
"""Obtiene información pública de un usuario de GitHub."""
url = f"https://api.github.com/users/{usuario}"
r = requests.get(url)

if r.status_code == 200:
datos = r.json()
print(f"👤 Usuario: {datos['login']}")
print(f"📍 Ubicación: {datos.get('location', 'Desconocida')}")
print(f"📊 Repos públicos: {datos['public_repos']}")
else:
print("❌ No se encontró el usuario.")

obtener_usuario("octocat")

5️⃣ Módulos estándar de Python​

Python incluye una extensa colección de módulos preinstalados, conocida como la biblioteca estándar (standard library). Esta biblioteca proporciona herramientas listas para usar que cubren prácticamente todas las necesidades del desarrollo cotidiano: manejo de archivos, cálculos matemáticos, fechas y horas, trabajo con texto, red, compresión, concurrencia, depuración y mucho más.

El objetivo de la biblioteca estándar es permitir que el programador resuelva la mayoría de los problemas sin necesidad de instalar librerías externas. Cada módulo agrupa funciones, clases y constantes relacionadas con una misma tarea, ofreciendo soluciones robustas y bien optimizadas mantenidas por el propio equipo de desarrollo de Python.

Gracias a esta colección, es posible escribir programas completos únicamente con las herramientas integradas en el lenguaje, lo que mejora la portabilidad, fiabilidad y mantenibilidad del código.

En este punto se estudiarán algunos de los módulos más comunes y utilizados de la biblioteca estándar, junto con ejemplos básicos que ilustran su uso. Por ejemplo...

  • Módulos de cálculo y estadística: math, random, statistics.
  • Módulos de sistema y archivos: os, pathlib, shutil.
  • Módulos de tiempo y fechas: datetime, time, calendar.
  • Módulos de texto, entorno y procesos: re, sys, subprocess.

Cada módulo se explicará con su propósito principal, funciones más relevantes y ejemplos prácticos. Al finalizar el tema, serás capaz de identificar qué módulo utilizar según la tarea y aprovechar las herramientas nativas de Python para resolver problemas comunes de programación.